(function () {
    "use strict";

    angular.module('core').controller('ferramentasSistemaController', controller);
    controller.$inject = ['$scope', '$filter', '$timeout', 'ferramentasSistemaService'];

    function controller($scope, $filter, $timeout, ferramentasSistemaService) {
        $scope.initializeLayout('Ferramentas do Sistema');

        /* funções */
        $scope.state = {
            resultado: {
                ativo: false,
                data: {},
                selecionado: {},
            },
            toggle: function () {
                $scope.state.resultado.ativo = !$scope.state.resultado.ativo;
            },
        };
        $scope.opcoes = {
            data: [
                { materialIcon: 'memory', grupo: 'Memória Buffer', titulo: 'Recarregar Navegação', acao: 'reloadNavegacao', descricao: 'Recarregar navegação persistida no banco para a memória buffer da sessão novamente.' },
                { materialIcon: 'memory', grupo: 'Memória Buffer', titulo: 'Recarregar Config', acao: 'reloadConfig', descricao: 'Recarregar configuração persistida no banco para a memória buffer da sessão novamente.' },
                { materialIcon: 'memory', grupo: 'Memória Buffer', titulo: 'Reiniciar Aplicativo', acao: 'resetApp', descricao: 'Reiniciar o buffer de memória da aplicação sem a necessidade de reiniciar o servidor web.' },
                { materialIcon: 'apps', grupo: 'Checagem', titulo: 'Checagem de Módulos', acao: 'checkModulos', descricao: 'Verifica se existem rotas criadas sem módulos principais.' },
            ],
        },

        $scope.initialize = function () {
        };

        $scope.reloadNavegacao = function (item) {
            $scope.state.resultado.selecionado = item;
            $scope.state.resultado.data = {};
            $scope.state.resultado.ativo = true;

            ferramentasSistemaService
                .reloadNavegacao({})
                .then(
                function (response) {
                    if (response.Status < 0) {
                        $scope.tools.toastr.error(response.Message, 'Serviço');
                        $scope.state.resultado.ativo = false;
                    } else {
                        angular.copy(angular.fromJson(response.Data), $scope.state.resultado.data);
                    }
                },
                function (_error) {
                    $scope.tools.toastr.error('Não foi possível conectar com o(s) servidor(es)');
                    $scope.state.resultado.ativo = false;
                });
        };
        $scope.reloadConfig = function (item) {
            $scope.state.resultado.selecionado = item;
            $scope.state.resultado.data = {};
            $scope.state.resultado.ativo = true;

            ferramentasSistemaService
                .reloadConfig({})
                .then(
                function (response) {
                    if (response.Status < 0) {
                        $scope.tools.toastr.error(response.Message, 'Serviço');
                        $scope.state.resultado.ativo = false;
                    } else {
                        angular.copy(angular.fromJson(response.Data), $scope.state.resultado.data);
                    }
                },
                function (_error) {
                    $scope.tools.toastr.error('Não foi possível conectar com o(s) servidor(es)');
                    $scope.state.resultado.ativo = false;
                });
        };
        $scope.checkModulos = function (item) {
            $scope.state.resultado.selecionado = item;
            $scope.state.resultado.data = {};
            $scope.state.resultado.ativo = true;

            ferramentasSistemaService
                .checkModulos({})
                .then(
                function (response) {
                    if (response.Status < 0) {
                        $scope.tools.toastr.error(response.Message, 'Serviço');
                        $scope.state.resultado.ativo = false;
                    } else {
                        angular.copy(angular.fromJson(response.Data), $scope.state.resultado.data);
                    }
                },
                function (_error) {
                    $scope.tools.toastr.error('Não foi possível conectar com o(s) servidor(es)');
                    $scope.state.resultado.ativo = false;
                });
        };
        $scope.resetApp = function (item) {
            $scope.state.resultado.selecionado = item;
            $scope.state.resultado.data = {};
            $scope.state.resultado.ativo = true;

            ferramentasSistemaService
                .resetApp({})
                .then(
                function (response) {
                    if (response.Status < 0) {
                        $scope.tools.toastr.error(response.Message, 'Serviço');
                        $scope.state.resultado.ativo = false;
                    } else {
                        angular.copy(angular.fromJson(response.Data), $scope.state.resultado.data);
                    }
                },
                function (_error) {
                    $scope.tools.toastr.error('Não foi possível conectar com o(s) servidor(es)');
                    $scope.state.resultado.ativo = false;
                });
        };

        $scope.initialize();
    }

})();